from ..models.setting.rp_translation_index import TRANSLATION_LEVEL


class RPTranslationIndexFC(object):
    """
    Model:
        满足翻译索引的所有算法逻辑

    Param:
        - env: odoo env

    Function:
        - get_index: 获取该条索引记录，如果没有则创建
        - get_upper_code: 根据索引获取上级的索引
        - get_level: 根据索引判断级别
        - get_parts: 根据索引拆分分部编码
    """

    def __init__(self, env):
        self.env = env

    def get_index(self, index):
        """
        获取该条索引记录，如果没有则创建

        Notice:
        1、如果三级没有则要查询是否存在二级，没有则先创建二级
        2、如果二级没有则要查询是否存在二级，没有则先创建一级

        :param index: 索引，以"fir.sec.trd"存在

        @return translation_index(rp.translation.index)
        """
        index_rcd = self.env['rp.translation.index'].search([('code', '=', index)])
        if not index_rcd:
            # 1、判断index级别
            level = self.get_level(index)
            # 2、根据索引拆分分部编码
            code_fir, code_sec, code_trd = self.get_parts(index)

            # 一级索引检查
            if level in [TRANSLATION_LEVEL[0][0], TRANSLATION_LEVEL[1][0], TRANSLATION_LEVEL[2][0]]:
                index_fir = self.env['rp.translation.index'].search([('code_fir', '=', code_fir)])
                if not index_fir:
                    # 如果一级索引不存在，则创建
                    index_fir = self.env['rp.translation.index'].create({'code_fir': code_fir})

            # 二级索引检查
            if level in [TRANSLATION_LEVEL[1][0], TRANSLATION_LEVEL[2][0]]:
                index_sec = self.env['rp.translation.index'].search([('code_fir', '=', code_fir), ('code_sec', '=', code_sec)])
                if not index_sec:
                    # 如果二级索引不存在，则创建
                    index_sec = self.env['rp.translation.index'].create({'code_fir': code_fir, 'code_sec': code_sec})

            # 三级索引检查
            if level == TRANSLATION_LEVEL[2][0]:
                index_trd = self.env['rp.translation.index'].search([('code_fir', '=', code_fir), ('code_sec', '=', code_sec), ('code_trd', '=', code_trd)])
                if not index_trd:
                    # 如果三级索引不存在，则创建
                    index_trd = self.env['rp.translation.index'].create({'code_fir': code_fir, 'code_sec': code_sec, 'code_trd': code_trd})

            if level == TRANSLATION_LEVEL[0][0]:
                return index_fir
            elif level == TRANSLATION_LEVEL[1][0]:
                return index_sec
            elif level == TRANSLATION_LEVEL[2][0]:
                return index_trd

        else:
            return index_rcd

    def get_upper_code(self, index):
        """
        根据索引获取上级的索引

        如果该索引已经是最上级，则返回False

        :param index: 索引，以"fir.sec.trd"存在

        @ return  索引 / False
        """
        # 找到最后一个点的位置
        last_dot_position = index.rfind('.')
        # 如果没有点
        if last_dot_position == -1:
            return False
        # 返回最后一个点之前的所有字符，即上一级
        return index[:last_dot_position]


    def get_level(self, index):
        """
        根据索引判断级别

        :param index: 索引，以"fir.sec.trd"存在

        @return level:['fir','sec','trd']
        """
        parts = index.split('.')
        if len(parts) == 1:
            return TRANSLATION_LEVEL[0][0]
        elif len(parts) == 2:
            return TRANSLATION_LEVEL[1][0]
        elif len(parts) == 3:
            return TRANSLATION_LEVEL[2][0]

    def get_parts(self, index):
        """
        根据索引拆分分部编码

        :param index: 索引，以"fir.sec.trd"存在

        @return fir,sec,trd
        """
        parts = index.split('.')
        code_fir = parts[0]
        code_sec = parts[1] if len(parts) >= 2 else ''
        code_trd = parts[2] if len(parts) >= 3 else ''
        return code_fir, code_sec, code_trd
